import http from "@/util/request";

/**
 * 获取客户消息列表
 * @returns {*}
 */
export function getCustomerMessageList() {
    return http('/dispatch/messages/customerMessageList', {}, true, 'GET')
}

/**
 * 获取消息详情列表
 * @param {string} conversationId - 会话ID
 * @param {string} lastId - 最后一条消息ID，用于分页（可选，默认为空）
 * @param {number} size - 每页消息数量（可选，默认为10）
 * @returns {*}
 */
export function getMessagesList(conversationId, lastId = '', size = 5) {
    const params = {
        conversationId,
        size
    };

    // 只有当 lastId 不为空时才添加到参数中
    if (lastId) {
        params.lastId = lastId;
    }

    return http('/dispatch/messages/messagesList', params, true, 'GET')
}

/**
 * 格式化消息数据
 * @param {Array} messages - 原始消息数组
 * @returns {Array} 格式化后的消息数组
 */
export function formatMessages(messages) {
    return messages.map(msg => ({
        messageId: msg.messageId,
        content: msg.content || msg.message || '',
        userType: msg.senderId === 'self' ? 'self' : 'friend',
        avatar: msg.avatar || '',
        createTime: msg.createTime,
        senderId: msg.senderId
    }))
}

/**
 * 加载初始消息列表
 * @param {string} conversationId - 会话ID
 * @param {number} pageSize - 每页消息数量
 * @returns {Promise<Object>} 返回格式化的消息和状态信息
 */
export async function loadInitialMessages(conversationId, pageSize = 5) {
    try {
        console.log('加载初始消息列表，会话ID:', conversationId)
        const res = await getMessagesList(conversationId, '', pageSize)

        if (res.code === 200) {
            const newMessages = res.data || []
            console.log('获取到的消息:', newMessages)

            const formattedMessages = formatMessages(newMessages)

            // 获取lastId用于后续分页
            const lastId = newMessages.length > 0 ? newMessages[newMessages.length - 1].messageId : ''

            return {
                success: true,
                messages: formattedMessages,
                lastId: lastId,
                hasMore: newMessages.length >= pageSize
            }
        } else {
            console.error('获取消息失败:', res.msg)
            return {
                success: false,
                error: res.msg || '获取消息失败',
                messages: [],
                lastId: '',
                hasMore: false
            }
        }
    } catch (error) {
        console.error('加载消息列表失败:', error)
        return {
            success: false,
            error: '加载失败',
            messages: [],
            lastId: '',
            hasMore: false
        }
    }
}

/**
 * 加载历史消息
 * @param {string} conversationId - 会话ID
 * @param {Array} currentMessages - 当前消息列表
 * @param {number} pageSize - 每页消息数量
 * @returns {Promise<Object>} 返回新的历史消息和状态信息
 */
export async function loadHistoryMessages(conversationId, currentMessages = [], pageSize = 5) {
    try {
        // 获取当前列表中最后一条消息的messageId作为lastId（加载更早的消息）
        const currentLastMessageId = currentMessages.length > 0 ? currentMessages[currentMessages.length - 1].messageId : ''

        console.log('加载历史消息参数:', {
            conversationId,
            lastId: currentLastMessageId,
            size: pageSize,
            currentListLength: currentMessages.length
        })

        const res = await getMessagesList(conversationId, currentLastMessageId, pageSize)

        if (res.code === 200) {
            const newMessages = res.data || []
            console.log('获取到的历史消息:', newMessages)
            console.log('新消息数量:', newMessages.length)

            if (newMessages.length > 0) {
                // 过滤掉已经存在的消息（避免重复）
                const existingMessageIds = new Set(currentMessages.map(msg => msg.messageId))
                const filteredMessages = newMessages.filter(msg => !existingMessageIds.has(msg.messageId))

                console.log('过滤后的新消息数量:', filteredMessages.length)

                if (filteredMessages.length > 0) {
                    const formattedMessages = formatMessages(filteredMessages)

                    return {
                        success: true,
                        messages: formattedMessages,
                        hasMore: newMessages.length >= pageSize,
                        isEmpty: false
                    }
                } else {
                    console.log('没有新的历史消息，可能已经到达最早的消息')
                    return {
                        success: true,
                        messages: [],
                        hasMore: false,
                        isEmpty: true
                    }
                }
            } else {
                console.log('没有返回任何消息')
                return {
                    success: true,
                    messages: [],
                    hasMore: false,
                    isEmpty: true
                }
            }
        } else {
            console.error('获取历史消息失败:', res.msg)
            return {
                success: false,
                error: res.msg || '获取历史消息失败',
                messages: [],
                hasMore: false,
                isEmpty: true
            }
        }
    } catch (error) {
        console.error('加载历史消息失败:', error)
        return {
            success: false,
            error: '加载历史消息失败',
            messages: [],
            hasMore: false,
            isEmpty: true
        }
    }
}

/**
 * 确认交易
 * @param {string} merchantOpenId - 商户开放ID
 * @param {string} projectId - 项目ID
 * @returns {*}
 */
export function confirmTransaction(merchantOpenId, projectId) {
    const params = {
        merchantOpenId,
        projectId
    };

    return http('/wx/acceptance/project/confirmTransaction', params, true, 'POST')
}
